/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DataTier;

import EntitiesTier.ClLiquidacao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import Utils.Utilidades;

/**
 *
 * @author Douglas
 */
public class LiquidacaoDAO 
{
  private Connection conn;
    
    public LiquidacaoDAO() throws Exception{
        
        try{
            this.conn = ConnectionFactory.getConnection();
        }
        catch(Exception e){
            throw new Exception (e.getMessage());
        }
    }
    
    public int incluir(ClLiquidacao clLiquidacao) throws Exception{
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs = null;
        if(clLiquidacao == null)
            throw new Exception("O valor passado não pode ser nulo");
        
        try
        {
            String SQL = "INSERT INTO Contrato_Liquidacao(LIQ_CONT, LIQ_DATA, LIQ_VALOR, LIQ_NF, LIQ_SERIE) "
                    + "VALUES (?,?,?,?,?)";
            conn = this.conn;
            ps = conn.prepareStatement(SQL, Statement.RETURN_GENERATED_KEYS);
            ps.setInt(1, clLiquidacao.getLIQ_CONT());
            ps.setDate(2, Utilidades.SetDataBD(clLiquidacao.getLIQ_DATA()));
            ps.setFloat(3, clLiquidacao.getLIQ_VALOR());
            ps.setString(4, clLiquidacao.getLIQ_NF());
            ps.setString(5, clLiquidacao.getLIQ_SERIE());
            ps.executeUpdate();
            rs = ps.getGeneratedKeys();
            if(rs.next())
            { 
                clLiquidacao.setLIQ_COD(rs.getInt(1));
            }
            
        }catch(SQLException e)
        {
            throw e;
        }finally{
            ConnectionFactory.closeConnection(conn, ps);
            return 1;
        }
    }
        public void atualizar(ClLiquidacao clLiquidacao) throws Exception{
        
        PreparedStatement ps = null;
        Connection conn = null;

        if(clLiquidacao == null)
            throw new Exception("O valor passado não pode ser nulo");

        try
        {
            String SQL = "UPDATE Contrato_Liquidacao SET LIQ_CONT = ? , LIQ_DATA = ? , LIQ_VALOR = ? , LIQ_NF = ? , "
                    + "LIQ_SERIE  = ? where LIQ_COD = ?";
            conn = this.conn;
            ps = conn.prepareStatement(SQL);
            ps.setInt(1, clLiquidacao.getLIQ_CONT());
            ps.setDate(2, Utilidades.SetDataBD(clLiquidacao.getLIQ_DATA()));
            ps.setFloat(3, clLiquidacao.getLIQ_VALOR());
            ps.setString(4, clLiquidacao.getLIQ_NF());
            ps.setString(5, clLiquidacao.getLIQ_SERIE());
            ps.setInt(6, clLiquidacao.getLIQ_COD());
            ps.executeUpdate();
        }catch(SQLException e)
        {
            throw e;
        }finally{
            ConnectionFactory.closeConnection(conn, ps);
        }
        
    }
      
    public List todos() throws Exception
    {
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs = null;

        try
        {
            conn = this.conn;
            ps = conn.prepareStatement("SELECT * FROM Contrato_Liquidacao cl");
            rs = ps.executeQuery();
            List<ClLiquidacao> lista = new ArrayList<ClLiquidacao>();
            while(rs.next())
            {
                int liq_cod = rs.getInt("LIQ_COD");
                int liq_cont = rs.getInt("LIQ_CONT");
                java.util.Date liq_data = Utilidades.GetDatabd(rs.getDate("LIQ_DATA"));
                float liq_valor = rs.getFloat("LIQ_VALOR");
                String liq_nf = rs.getString("LIQ_NF");
                String liq_serie = rs.getString("LIQ_SERIE");

                ClLiquidacao clLiquidacao = new ClLiquidacao(liq_cod, liq_cont, liq_data, liq_valor, liq_nf,
                        liq_serie);

                lista.add(clLiquidacao);
            }
            return lista;
        }
        catch(SQLException sqle)
        {
            throw new Exception(sqle);
        }
        finally
        {
            ConnectionFactory.closeConnection(conn, ps, rs);
        }
    }
    
    public List todos(int liq_cont) throws Exception
    {
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs = null;

        try
        {
            conn = this.conn;
            ps = conn.prepareStatement("SELECT * FROM Contrato_Liquidacao cl where cl.LIQ_CONT = ?");
            ps.setInt(1, liq_cont);
            rs = ps.executeQuery();
            List<ClLiquidacao> lista = new ArrayList<ClLiquidacao>();
            while(rs.next())
            {
                int liq_cod = rs.getInt("LIQ_COD");
                java.util.Date liq_data = Utilidades.GetDatabd(rs.getDate("LIQ_DATA"));
                float liq_valor = rs.getFloat("LIQ_VALOR");
                String liq_nf = rs.getString("LIQ_NF");
                String liq_serie = rs.getString("LIQ_SERIE");

                ClLiquidacao clLiquidacao = new ClLiquidacao(liq_cod, liq_cont, liq_data, liq_valor, liq_nf,
                        liq_serie);

                lista.add(clLiquidacao);
            }
            return lista;
        }
        catch(SQLException sqle)
        {
            throw new Exception(sqle);
        }
        finally
        {
            ConnectionFactory.closeConnection(conn, ps, rs);
        }
    }
    
    public ClLiquidacao procurar(int liq_cod) throws Exception
    {
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs = null;

        try
        {
            conn = this.conn;
            ps = conn.prepareStatement("SELECT * FROM contrato_liquidacao WHERE liq_cod = ?");
            ps.setInt(1, liq_cod);
            rs = ps.executeQuery();
            if(!rs.next())
            {
                throw new Exception("Não foi encontrado nenhum "
                        + "registro com o ID: " + liq_cod);
            }
            int liq_cont = rs.getInt("LIQ_CONT");
            java.util.Date liq_data = Utilidades.GetDatabd(rs.getDate("LIQ_DATA"));
            float liq_valor = rs.getFloat("LIQ_VALOR");
            String liq_nf = rs.getString("LIQ_NF");
            String liq_serie = rs.getString("LIQ_SERIE");

            ClLiquidacao clLiquidacao = new ClLiquidacao(liq_cod, liq_cont, liq_data, liq_valor, liq_nf,
                        liq_serie);

            return clLiquidacao;
        }
        catch(SQLException sqle)
        {
            throw new Exception(sqle);
        }
        finally
        {
            ConnectionFactory.closeConnection(conn, ps, rs);
        }
    }
         
    public void excluir(int cod_liq) throws Exception
    {
        PreparedStatement ps = null;
        Connection conn = null;

        if(cod_liq == 0)
        {
            throw new Exception("O valor passado não pode ser nulo");
        }

        try
        {
            conn = this.conn;
            ps = conn.prepareStatement("DELETE FROM contrato_liquidacao WHERE LIQ_COD = ?");
            ps.setInt(1, cod_liq);
            ps.executeUpdate();
        }
        catch(SQLException sqle)
        {
            throw new Exception("Erro ao excluir dados: " + sqle);
        }
        finally
        {
            ConnectionFactory.closeConnection(conn, ps);
        }
    }
    
    public void excluir_cont(int cod_cont) throws Exception
    {
        PreparedStatement ps = null;
        Connection conn = null;

        if(cod_cont == 0)
        {
            throw new Exception("O valor passado não pode ser nulo");
        }

        try
        {
            conn = this.conn;
            ps = conn.prepareStatement("DELETE FROM contrato_liquidacao WHERE LIQ_CONT = ?");
            ps.setInt(1, cod_cont);
            ps.executeUpdate();
        }
        catch(SQLException sqle)
        {
            throw new Exception("Erro ao excluir dados: " + sqle);
        }
        finally
        {
            ConnectionFactory.closeConnection(conn, ps);
        }
    }

}

